// Object.defineProperty() 方法会直接在一个对象上定义一个新属性，或者修改一个对象的现有属性，并返回此对象。

const obj = {
  a: 3,
  b: 4,
};

let num;

// 作用就是用来劫持数据的
// 里面是三个参数
// 1. 要定义属性的对象。
// 2. 要定义或修改的属性的名称或 Symbol 。
// 3. 要定义或修改的属性描述符。
Object.defineProperty(obj, "a", {
  get() {
    // get函数是这个对象下的该属性被访问的时候调用
    console.log("get");
    // get函数必须要有返回值, 并且返回的值就是这个属性最终的值
    return num;
  },
  set(val) {
    // set函数是这个对象下的该属性被修改的时候调用
    // 里面可以接收一个参数，这个参数就是想要修改成为的值
    console.log("set", val);
    num = val;
    // 只要数据一改变，set函数就会执行，里面如果放进去render函数，页面就可以自动更新了
  },
});

// console.log(obj.a);
// obj.a = 10;

obj.a = 10;
console.log(obj.a);
